This invention relates generally to the field of computer printers, and specifically to a system and process for recognizing out-of-band characters in data streams applied to a printer by one or more computers in more than one printer control language.
It has become common in the industry for printers to be designed to accept more than one printer control language. For example, many popular computer printers are capable of operating on data both in the popular page description language (PDL) known as PCL5 and in the PDL known as POSTSCRIPT. Other printers are capable of operating not only with such PDLs, but also with other control languages, such as the one known as PJL.
Early multi-interpreter printers required manual switching from one language to another. More recent devices, however, typically employ some form of language-sensing technology. A goal of such printers is to appear to the end user as if the printer were designed exclusively for the language the user is providing. For example, such a printer should perfectly emulate a POSTSCRIPT printer when sent POSTSCRIPT data, and should perfectly emulate a PCL printer when sent PCL data.
Unfortunately, different languages allow for certain characters to be interpreted differently when presented in the middle of a data stream. For instance, in a POSTSCRIPT printer, the character "control-C" (ASCII character no. 3) is supposed to be acted upon and removed from the data stream as soon as it is received, and is supposed to be interpreted as a command from the user to abort the current printing job. Similarly, a "control-T" (ASCII character no. 20) is supposed to be acted upon and removed from the data stream as soon as it is received, and is supposed to be interpreted as a command from the user to send a status report. Such characters, which are processed out of turn in the data stream, are referred to as "asynchronous events," or "out-of-band" ("OOB") characters or events. In some languages, groups of special characters are used to signal OOB events. For convenience of notation herein, a single character or a set of characters used for signaling an OOB event will be referred to as an "OOB character."
OOB characters would not be problematic in a multi-interpreter printer if the printer was informed that the data stream in which such characters were received would contain only one type of data, e.g., POSTSCRIPT data. However, in typical use of such printers there is no way to tell whether the incoming data is in one language or another, and it is common for a data stream to include, for example, both PCL and POSTSCRIPT data interspersed. Processing problems result when such characters are OOB in some of the languages recognized by the printer and not others.
To address such problems, some printers require the user to manually select which language the printer is to recognize, either by a switch on the printer or a menu selection.
Other printers avoid these problems by using nonstandard emulation of one or more of the recognized languages to remove ambiguity in processing. For example, if two languages make use of the "control-T" character, the printer may choose to ignore the "control-T" character altogether or may interpret a single "control-T" as corresponding to a first language and a repeated "control-T" as corresponding to a second language. A disadvantage of this method is imperfect emulation of one or more of the languages by the printer.
Yet a third method is to pre-process the incoming data stream by scanning ahead for OOB characters while at the same time attempting to determine which PDL the data stream belongs to. Since the entire data stream is processed to some extent in turn under this approach, OOB characters are not truly processed asynchronously, but only in a pseudo-asynchronous manner. Thus, additional processing overhead is required to determine unambiguously the language to which an OOB character pertains.
Yet another approach is to treat all data as synchronous data, and to simply process OOB characters in turn in the data stream. However, this approach sharply reduces the benefits of some commands, such as a command to abort a job that is currently being processed or to provide a status report on a job.
Thus, it would be desirable for a printer to be able to recognize and process OOB characters without the increased complexity, increased overhead, and deviation from perfect emulation that have characterized known techniques.